今天因為 EKS 裡面的 internal-ip 不足,所以要調整VPC的 Subnet 的分配,就是因為 調整網路
的原因,所以要先把 EKS
destroy ,然後調整完在 rebuild 起來,真的是大工程。
幸好我平常都會使用 Terraform 的工具來把 AWS service 的部分變成程式進行管理,所以在這部分比較簡單不需要擔心會漏掉哪些資源沒開啟。 因此對 MLE 來講 請隨手養成用程式碼紀錄的習慣
真的很重要!!!
做版本控制的工具很多,這邊就舉 GitLab CI 來說明,另外 Github 我相信大家應該都聽過很多了,也大概知道怎麼用了,這裡也不是要說明怎麼使用 Git 來做版本管理工具。
但是對於版本控制而言,最主要的精髓是在 code push 之後,所觸發的 DevOps CI/CD 的部分 (Continuous Integration),同時也是在開發時不可或缺的自動化部署工具。
相信到這邊聰明的各位應該都覺得是廢話
對一個MLE 而言,有多少種類的程式語言需要使用,就我這邊需要使用到的主要有三種
And Why?
因為資源需要做管理,有些時候不是演算法跟增加 cpu / gpu 就可以突破的問題,包和 Memery Cache, Network Region and etc. 都需要調整,因此為了加速運算有時候需要改系統的架構,由其實對於資料量過大時,這部分就特別重要And Why?
簡單來講就是把 Application container 再包裝成一個可以提供 Service 的 pod (Service 是 k8s 上的 Service) ,至於為什麼會需要變成 K8s ,其實有很多種原因,但是我們下次再講And Why?
但是 Model 不會自己長腳來提供服務,所以時常需要直接 Refactor Application from data scientist code ,因此 Python 也是需要常常碰到的語言,接著我使用著些 Language 之後可以幹嘛,可以產生我要的資源或者 Application 嗎?
當然不行啊!!!但能躲嗎?也不行啊,但是不同語言又不同的 compiler 或者 builder,所以要怎麼做,不能全部的程式碼都寫在同一個專案裡面吧。
還真剛好我試過,所以改起來很痛苦,雖然看或開檔案很方邊,但是常常會改錯檔案,真的是很Sh*t
首先剛剛上面提到的三個程式語言,接下來就要考慮這三個程式語言分別是用在哪裡?要怎麼使用它?所以像 Terraform 有 init ,typescript 也有 builder,但是最後的 python 沒有 builder,那這樣怎使用的方便一些來使用跟部署
更進階一點來說 k8s 上面的設定需要使用的 AWS 的 ARN or ID 為了要取的這些 ARN or ID 的 information 帶進 k8s 裡面綁定在特定的 component 上面,所以當然可以把 Terraform 寫 Response 把 inforamtion 帶回來及可
另外我在開發Python 然後每次修改完後就 rebuild to a image,然後新的 Image 又要丟到 k8s 上面從新部署,有時候我的 Image 又需要 Mount Volumes or Expose service 的話,就把 Build Iamge 跟 k8s cdk8s 寫在一起,只要更新 image 的時候, k8s 的部分就一起改一改更新。
如果是這樣,很開心你的專案就越來越大, 你會發現,公司非要你不可
,因為你把簡單的事情變成更複雜了。
為什麼我知道?因為我這樣幹過,但是會造成沒有假日可以好好出去玩,因為有問題就只有你可以解決,只能出國就好好帶筆電 standby 吧 (小秘密,嘻嘻)
因此這篇重要的就是對 MLE 而言,因為底層 Infrasturcture 到 Machine Lenaring Application 都需要碰到的狀況下,要怎麼切分專案才可以讓各個專案獨立作業呢?
當然不能少一些 Multi-Threads 跟 Multi-Processing 還有 Multi-Pods 的差異了,這部分下次再講
到這邊應該越來越有感各個角色分配到的範圍了,所以不是把所有的東西都丟在一個專案裡面做就可以,CI 大家都知道怎麼使用,也知道對於開發的重要性,但是更重要的是 CI 要怎麼維護跟開發,把專案切成幾個小專案才是真正的高手,這系列後面會舉例說明。